ํ๋ฌํฐ(Flutter)๋?
Flutter๋ Google์์ ๊ฐ๋ฐํ ์คํ์์ค UI ํ๋ ์์ํฌ๋ก, ํ๋์ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ํตํดย Android,ย iOS,ย Windows,ย macOS,ย Linux, ๊ทธ๋ฆฌ๊ณ ์น ํ๋ซํผ์์ ์๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์์ต๋๋ค.ย ์ด ํ๋ ์์ํฌ๋ ๋น ๋ฅธ ๊ฐ๋ฐ, ๋์ ์ฑ๋ฅ, ๊ทธ๋ฆฌ๊ณ ํ๋ซํผ ๊ฐ ์ผ๊ด๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๋ฐ ์ด์ ์ ๋ง์ถ๊ณ ์์ต๋๋ค.
Flutter์ ์ฃผ์ ํน์ง
-
ํฌ๋ก์ค ํ๋ซํผ ๊ฐ๋ฐ
Flutter๋ ๋จ์ผ ์ฝ๋๋ฒ ์ด์ค๋ก ์ฌ๋ฌ ํ๋ซํผ์์ ์คํ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์์ด ๊ฐ๋ฐ ๋น์ฉ๊ณผ ์๊ฐ์ ์ ์ฝํ ์ ์์ต๋๋ค. -
Dart ์ธ์ด ์ฌ์ฉ
Flutter๋ Google์์ ๊ฐ๋ฐํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ธ Dart๋ฅผ ์ฌ์ฉํฉ๋๋ค. Dart๋ ์๋ฐ์ ํ์ด์ฌ, C์ ์ ์ฌํ ์น์ํ ๋ฌธ๋ฒ์ ์ ๊ณตํ๋ฉฐ ๋ฐฐ์ฐ๊ธฐ ์ฝ๊ณ ๊ฐ๋ ฅํฉ๋๋ค. -
์์ ฏ ๊ธฐ๋ฐ ๊ตฌ์กฐ
Flutter์ ๋ชจ๋ UI ๊ตฌ์ฑ ์์๋ย ์์ ฏ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์์ ฏ์ ํ๋ฉด์ ๋ ์ด์์, ์คํ์ผ, ์ ๋๋ฉ์ด์ ๋ฑ์ ์ ์ํ๋ฉฐ, ์ด๋ฅผ ์กฐํฉํ์ฌ ๋ณต์กํ UI๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. -
๋ ๋ฆฝ์ ์ธ ๋ ๋๋ง ์์ง
Flutter๋ Skia๋ผ๋ ๊ณ ์ฑ๋ฅ ๋ ๋๋ง ์์ง์ ์ฌ์ฉํ์ฌ ์ด์์ฒด์ ์ ์์กดํ์ง ์๊ณ ๋ ๋ฆฝ์ ์ผ๋ก UI๋ฅผ ๋ ๋๋งํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ค์ดํฐ๋ธ ์์ค์ ์ฑ๋ฅ๊ณผ ์ผ๊ด๋ ๋์์ธ์ ์ ๊ณตํฉ๋๋ค. -
๋น ๋ฅธ ๊ฐ๋ฐ ์๋
Flutter๋ย Hot Reloadย ๊ธฐ๋ฅ์ ํตํด ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ค์๊ฐ์ผ๋ก ๋ฐ์ํ์ฌ ๊ฐ๋ฐ ์๋๋ฅผ ํฌ๊ฒ ํฅ์์ํต๋๋ค.
Flutter์ ์ํคํ ์ฒ
Flutter๋ ์ธ ๊ฐ์ง ์ฃผ์ ๋ ์ด์ด๋ก ๊ตฌ์ฑ๋ฉ๋๋ค:
-
Embedder Layer
๊ฐ ํ๋ซํผ๋ณ๋ก ์ด์์ฒด์ ์ ์ํธ์์ฉํ๋ฉฐ ์ํธ๋ฆฌ ํฌ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์ ์ ๋ ฅ, ํต์ , ๋ ๋๋ง ๋ฑ์ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค. -
Engine Layer
Skia ๋ ๋๋ง ์์ง๊ณผ ์ ์์ค API๋ฅผ ํฌํจํ๋ฉฐ, C++๋ก ์์ฑ๋์ด ๋์ ์ฑ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด ๋ ์ด์ด๋ Dart ์ฝ๋๋ฅผ ์คํํ๊ณ UI๋ฅผ ๋ ๋๋งํฉ๋๋ค. -
Framework Layer
Dart๋ก ์์ฑ๋ ๊ณ ์์ค API๋ฅผ ์ ๊ณตํ๋ฉฐ, ์ ๋๋ฉ์ด์ , ์ ์ค์ฒ, ๋ ์ด์์ ๋ฑ์ ๊ธฐ๋ฅ์ ์ง์ํฉ๋๋ค. Material ๋ฐ Cupertino ๋์์ธ ์์คํ ๋ ํฌํจ๋์ด ์์ด ๋ค์ํ ์คํ์ผ์ ์ฑ ์ ์์ด ๊ฐ๋ฅํฉ๋๋ค.
Flutter์ ์ฅ์
-
๋น ๋ฅธ ํผํฌ๋จผ์ค: ๋ ๋ฆฝ์ ์ธ ๋ ๋๋ง ์์ง์ผ๋ก ์ธํด ๋ค์ดํฐ๋ธ ์ฑ์ ๊ฐ๊น์ด ์ฑ๋ฅ ์ ๊ณต.
-
๊ฐ๋ฐ ์์ฐ์ฑ ํฅ์: Hot Reload์ ํฌ๋ก์ค ํ๋ซํผ ์ง์์ผ๋ก ๊ฐ๋ฐ ์๊ฐ ๋จ์ถ.
-
ํ๋ถํ ์์ ฏ ๋ผ์ด๋ธ๋ฌ๋ฆฌ: ๋ค์ํ UI ๊ตฌ์ฑ ์์ ๋ฐ ๋์์ธ ์์คํ ์ ๊ณต.
-
์ปค๋ฎค๋ํฐ์ ์ง์: Google์ ๊ฐ๋ ฅํ ์ง์๊ณผ ํ๋ฐํ ์คํ์์ค ์ปค๋ฎค๋ํฐ ํ๋.
์ฌ์ฉํด๋ณด๊ธฐ
Flutter๋ก ์ฑ์ ๊ฐ๋ฐํ๊ธฐ ์ํด ํ์ํ ํ๊ฒฝ ์ค์ ๊ณผ ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฒ์ ๋จ๊ณ๋ณ๋ก ์์๋ณด๊ฒ ์ต๋๋ค.
1. ๊ฐ๋ฐ ํ๊ฒฝ ์ค์
a. Flutter SDK ์ค์น
- Flutter ๊ณต์ ์น์ฌ์ดํธ์ ์ ์ํ์ฌ SDK๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค.
- ์์ถ์ ํ๊ณ , ์ํ๋ ์์น์ Flutter ํด๋๋ฅผ ๋์ธ์.
- ์์คํ
ํ๊ฒฝ ๋ณ์์ Flutter์
bin
๋๋ ํ ๋ฆฌ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
b. IDE ์ค์น
- Flutter๋ ์ฌ๋ฌ IDE์ ํธํ๋์ง๋ง, Android Studio ๋๋ Visual Studio Code๋ฅผ ์ถ์ฒํฉ๋๋ค. ๋ ๋ค Flutter์ Dart ํ๋ฌ๊ทธ์ธ์ ์ค์นํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
2. Flutter ํ๋ก์ ํธ ์์ฑ
- ํฐ๋ฏธ๋(๋๋ ๋ช ๋ น ํ๋กฌํํธ)์ ์ด๊ณ ์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์ฌ ์๋ก์ด Flutter ํ๋ก์ ํธ๋ฅผ ์์ฑํฉ๋๋ค:
flutter create my_app
(์ฌ๊ธฐ์ my_app
์ ํ๋ก์ ํธ ์ด๋ฆ์
๋๋ค.)
- ์์ฑ๋ ํ๋ก์ ํธ ํด๋๋ก ์ด๋ํฉ๋๋ค:
cd my_app
3. ์ฑ ์คํ
- ์๋ฎฌ๋ ์ดํฐ๋ฅผ ์คํํ๊ฑฐ๋ ์ค์ ๊ธฐ๊ธฐ๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค.
- ์๋ ๋ช ๋ น์ด๋ก ์ฑ์ ์คํํฉ๋๋ค:
flutter run
4. ๊ธฐ๋ณธ ์ฝ๋ ๊ตฌ์กฐ ์ดํดํ๊ธฐ
lib/main.dart
ํ์ผ์ด Flutter ์ฑ์ ์์์ ์
๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ ์ฝ๋๋ ์๋์ ๊ฐ์ต๋๋ค:
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Demo Home Page'),
),
body: Center(
child: Text('Hello, Flutter!'),
),
),
);
}
}
5. ์์ ฏ ์ถ๊ฐ ๋ฐ ์์
- Flutter๋ ์์ ฏ ๊ธฐ๋ฐ์ผ๋ก ์๋ํฉ๋๋ค. ๊ธฐ์กด ์ฝ๋๋ฅผ ์์ ํ์ฌ UI๋ฅผ ๋ณ๊ฒฝํด๋ณด์ธ์.
- ์๋ฅผ ๋ค์ด,
Text('Hello, Flutter!')
๋ฅผ ๋ค๋ฅธ ํ ์คํธ๋ก ๋ณ๊ฒฝํ๊ฑฐ๋, ์๋ก์ด ์์ ฏ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
6. Hot Reload ๊ธฐ๋ฅ ํ์ฉ
์ฝ๋๋ฅผ ์์ ํ ํ, ์๋ฎฌ๋ ์ดํฐ์์ r
ํค๋ฅผ ๋๋ฌ Hot Reload๋ฅผ ์คํํ๋ฉด, ๋ณ๊ฒฝ ์ฌํญ์ด ์ฆ์ ๋ฐ์๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ๋น ๋ฅด๊ฒ UI๋ฅผ ์์ ํ๊ณ ํ
์คํธํ ์ ์์ต๋๋ค.
7. ํจํค์ง ์ถ๊ฐ
- Flutter์ ๋ค์ํ ํจํค์ง๋ฅผ ํ์ฉํ๊ณ ์ถ๋ค๋ฉด
pubspec.yaml
ํ์ผ์ ํจํค์ง๋ฅผ ์ถ๊ฐํ ํ, ์๋ ๋ช ๋ น์ด๋ก ์ค์นํฉ๋๋ค:
flutter pub get
๋ง๋ฌด๋ฆฌ
์ด์ ๊ธฐ๋ณธ์ ์ธ Flutter ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์ตํ์ต๋๋ค. Flutter์ ๋ค์ํ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ์์ ๋ง์ ์ฑ์ ๋ง๋ค์ด ๋ณด์ธ์!